﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FAS.Objetos;
using FAS;
using FAS.App_Code;
using System.Net;
using System.IO;

namespace FasGUI
{
    public partial class DetallesProblema : Form
    {
        private Boolean EstadoTB = false;
        Problema problema;
        private FormFiltroProblemas filtro;
        private int Siguiente, anterior;
        public DetallesProblema(FAS.Objetos.Problema problema, FormFiltroProblemas filtro)
        {
            this.filtro = filtro;
            this.problema = problema;
            // TODO: Complete member initialization
            InitializeComponent();
            fillDatos();
            estado();
            estadoSigAnt();
        }

        private void estadoSigAnt()
        {
            ConexionMySQL conexion = new ConexionMySQL();
            DataSet data = conexion.GetQuery("SELECT * FROM Problema where IdMateria = '" + this.problema.IdMateria + "' AND IdObjetivo = '" + this.problema.IdObjetivo + "'");
            int size = data.Tables[0].Rows.Count;
            for (int x = 0; x < size; x++)
            {
                DataRow rowD = data.Tables[0].Rows[x];
                string IdProblemaStr = rowD["IdProblema"].ToString();
                if (IdProblemaStr.Equals(this.problema.IdProblema.ToString()))
                {
                    if ((x == 0))
                    {
                        this.button2.Enabled = false;
                    }
                    else 
                    {
                        DataRow rowS = data.Tables[0].Rows[x - 1];
                        IdProblemaStr = rowS["IdProblema"].ToString();
                        anterior = int.Parse(IdProblemaStr);
                        this.button2.Enabled = true;
                    }
                    if ((x + 1) == (size ))
                    {
                        this.button3.Enabled = false;
                    }
                    else 
                    {
                        DataRow rowS = data.Tables[0].Rows[x + 1];
                        IdProblemaStr = rowS["IdProblema"].ToString();
                        Siguiente = int.Parse(IdProblemaStr);
                        this.button3.Enabled = true;
                    }
                    break;
                }
            }
        }

        private void fillDatos()
        {
            label1.Text = "Detalles Problema : "+this.problema.IdProblema;
            txtOpcionA.Clear(); txtOpcionB.Clear(); txtOpcionC.Clear(); txtOpcionD.Clear(); txtProblema.Clear();
            paste(txtOpcionA,problema.Opciones[0]);
            paste(txtOpcionB, problema.Opciones[1]);
            paste(txtOpcionC, problema.Opciones[2]);
            paste(txtOpcionD, problema.Opciones[3]);
            paste(txtProblema, problema);
            this.radioButton1.Checked = problema.Opciones[0].Respuesta;
            this.radioButton2.Checked = problema.Opciones[1].Respuesta;
            this.radioButton3.Checked = problema.Opciones[2].Respuesta;
            this.radioButton4.Checked = problema.Opciones[3].Respuesta;
        }

        private void paste(RichTextBox rTB, Opcion opcion) 
        {
            rTB.Rtf = opcion.Texto;
       
        }
        private void paste(RichTextBox rTB, Problema problema)
        {
            rTB.Rtf = problema.Texto;
        }

        private void estado() 
        {
            foreach (Control o in this.tableLayoutPanel1.Controls)
            {
                if (o is RadioButton || o is RichTextBox)
                    (o).Enabled= EstadoTB;
            }
            txtProblema.Enabled = EstadoTB;
            btnCancelar.Enabled = EstadoTB;
            btnCancelar.Enabled = EstadoTB;
            btnNuevo.Enabled = !EstadoTB;
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            EstadoTB = true;
            estado();
        }


        private void updateProblema(Problema p)
        {
            p.Texto = txtProblema.Rtf;
            p.Nombre = "http://" + ConexionMySQL.ip + "/FAS/images/" + p.IdProblema + ".png";
            p.update();
        }

        private void updateOpcion(Opcion opcion, Boolean respuesta, RichTextBox rtb) 
        {
            opcion.Texto = rtb.Rtf;
            opcion.Respuesta = respuesta;
            opcion.update();
        }

      
       

        private void DetallesProblema_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.Dispose();
            filtro.Show();
        }


        private void btnGuardar_Click_1(object sender, EventArgs e)
        {
            if (Auxiliar.validaVacioRTB(this.txtOpcionA, txtOpcionB, txtOpcionC, txtOpcionD, txtProblema))
            {
                Problema p = problema;
                updateProblema(p);
                ImageManipulator.banderaMedia = true;
                ImageManipulator.generarImagenes(txtProblema, p.IdProblema.ToString());
                string opcionA = p.IdProblema + "-A";
                string opcionB = p.IdProblema + "-B";
                string opcionC = p.IdProblema + "-C";
                string opcionD = p.IdProblema + "-D";
                string pathA = "http://" + ConexionMySQL.ip + "/FAS/images/" + opcionA + ".png";
                string pathB = "http://" + ConexionMySQL.ip + "/FAS/images/" + opcionB + ".png";
                string pathC = "http://" + ConexionMySQL.ip + "/FAS/images/" + opcionC + ".png";
                string pathD = "http://" + ConexionMySQL.ip + "/FAS/images/" + opcionD + ".png";
                ImageManipulator.generarImagenes(txtOpcionA, opcionA);
                ImageManipulator.generarImagenes(txtOpcionB, opcionB);
                ImageManipulator.generarImagenes(txtOpcionC, opcionC);
                ImageManipulator.generarImagenes(txtOpcionD, opcionD);
                updateOpcion(problema.Opciones[0], radioButton1.Checked, txtOpcionA);
                updateOpcion(problema.Opciones[1], radioButton2.Checked, txtOpcionB);
                updateOpcion(problema.Opciones[2], radioButton3.Checked, txtOpcionC);
                updateOpcion(problema.Opciones[3], radioButton4.Checked, txtOpcionD);
                filtro.fillAll();
                MessageBox.Show("Se ha Actualizado el Problema");
            }
        }

        private void btnCancelar_Click_1(object sender, EventArgs e)
        {
            EstadoTB = false;
            estado();
            fillDatos();
        }

        private void btnNuevo_Click_1(object sender, EventArgs e)
        {
            btnNuevo_Click(sender, e);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Dispose();
            filtro.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.problema = FAS.Objetos.Problema.GetProblema(anterior);
            this.fillDatos();
            this.estadoSigAnt();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.problema = FAS.Objetos.Problema.GetProblema(Siguiente);
            this.fillDatos();
            this.estadoSigAnt();
        }
    }
}